const express = require("express");
const cors = require("cors");
const routes = require("./routes");
const jwt = require("jsonwebtoken");

const app = express();
const port = 3000;
// 这是一个示例密钥，实际情况中应该更安全地存储密钥
const secretKey = "my_secret_key";
// 使用 cors 中间件
app.use(cors());
app.use(express.json({ limit: "10mb" }));
// 中间件函数，用于验证令牌
function verifyToken(req, res, next) {
  const token = req.headers["authorization"];

  if (!token) {
    return res.status(403).send({ auth: false, message: "没有提供令牌" });
  }

  jwt.verify(token, secretKey, (err, decoded) => {
    if (err) {
      return res.status(500).send({ auth: false, message: "令牌验证失败" });
    }

    // 保存解码后的用户信息以便后续路由使用
    req.user = decoded;
    next();
  });
}

// 使用 bodyParser 中间件来解析请求体
app.use(express.json());

// app.use(express.static(__dirname + '/dist'));

// 应用中间件到所有需要验证令牌的路由
app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader("Access-Control-Allow-Methods", "GET, POST");
  res.setHeader("Access-Control-Allow-Headers", "Content-Type");
  // 在这里添加不需要验证令牌的路由
  console.log(req.path);
  if (req.path === "/user/login" || req.path === "/user/register") {
    return next();
  }

  // 对除登录注册之外的所有路由进行令牌验证
  verifyToken(req, res, next);
});

routes(app);

// 启动服务器，监听指定端口
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});
